package xianchenglock;

import java.util.concurrent.TimeUnit;

/**
 * @功能
 * @创建时间 2019/12/18
 */
public class S {
    int count = 0;
    synchronized void m1(){
        // do sth needn't sync
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 业务逻辑中只有下面这句需要sync，这是不因该给整个方法上锁
        count++;
        // do sth needn't sync
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
    void m2(){
        // do sth needn't sync
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 业务逻辑中只有下面这句更需要sync，这是不应该给整个方法上锁
        // 采用较轻的锁，可以使线程争用时间变短，从而提高效率
        synchronized (this){
            count++;
        }
        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
